unit UContasReceberDb;

interface

uses UPersistenciaSQL, UContasReceberMd, IBCustomDataSet, SysUtils, StrUtils;

type
   TContasReceberDb = class(TObject)

      private
         objPersistenciaSQL : TPersistenciaSQL;

      public
         constructor Create;
         destructor Destroy;

         function obterObjPersistenciaSQL : TPersistenciaSQL;
         function inserirContasReceber(pObjContasReceber : TContasReceberMd) : Boolean;
         function alterarContasReceber(pObjContasReceber : TContasReceberMd) : Boolean;
         function excluirContasReceber(pCodigo : Integer) : Boolean;
         function procurarContasReceber(pCodigo : Integer) : TContasReceberMd;
         function receberContasReceber(pCodigo : Integer) : Boolean;
         function obterContasReceber : TContasReceberMd;
         function obterListaContasReceber : TIBDataSet;

end;

implementation

uses ULoginCt, UUsuarioMd;

constructor TContasReceberDb.Create;
begin
  inherited;
    self.objPersistenciaSQL := TPersistenciaSQL.Create;
end;

destructor TContasReceberDb.Destroy;
begin
    self.objPersistenciaSQL.Destroy;
  inherited;
end;

function TContasReceberDb.obterObjPersistenciaSQL : TPersistenciaSQL;
begin
  if self.objPersistenciaSQL = nil then
    self.objPersistenciaSQL := TPersistenciaSQL.Create;
  result := self.objPersistenciaSQL;
end;

function TContasReceberDb.inserirContasReceber(pObjContasReceber : TContasReceberMd) : Boolean;
var
  sql : String;
  separador : Char;  
begin
  try
    separador := DecimalSeparator;
    DecimalSeparator := '.';

    sql := 'insert into contasreceber (data_recebimento, valor, observacao, recebido) values (''' +
            FormatDateTime('yyyy-mm-dd', pObjContasReceber.getDataRecebimento) + ''', ' +
            FormatFloat('0.00', pObjContasReceber.getValor) + ', ' +
            QuotedStr(pObjContasReceber.getObservacoes) + ', ''N'')';
    result := self.objPersistenciaSQL.executaUpdateQuery(sql);

    DecimalSeparator := separador;    
  except
    on e : Exception do
    begin
      DecimalSeparator := separador;
      raise;
    end;
  end;
end;

function TContasReceberDb.alterarContasReceber(pObjContasReceber : TContasReceberMd) : Boolean;
var
  sql : String;
  separador : Char;
begin
  try
    separador := DecimalSeparator;
    DecimalSeparator := '.';

    sql := 'update contasreceber set data_recebimento = ''' +  FormatDateTime('yyyy-mm-dd', pObjContasReceber.getDataRecebimento) + ''', ' +
           'valor = ' + FormatFloat('0.00', pObjContasReceber.getValor) + ', observacao = ' +
           QuotedStr(pObjContasReceber.getObservacoes) + ' where id_contasreceber = ' +
           IntToStr(pObjContasReceber.getIdContasReceber);
    result := self.obterObjPersistenciaSQL.executaUpdateQuery(sql);

    DecimalSeparator := separador;
  except
    on e : Exception do
    begin
      DecimalSeparator := separador;
      raise;
    end;
  end;
end;

function TContasReceberDb.excluirContasReceber(pCodigo : Integer) : Boolean;
var
  sql : String;
begin
  try
    sql := 'delete from contasreceber where id_contasreceber = ' + IntToStr(pCodigo);
    result := self.obterObjPersistenciaSQL.executaUpdateQuery(sql);    
  except
    on e : Exception do
  end;
end;

function TContasReceberDb.receberContasReceber(pCodigo : Integer) : Boolean;
var
  sql : String;
begin
  try
    sql := 'update contasreceber set recebido = ''S'' where id_contasreceber = ' + IntToStr(pCodigo);
    result := self.obterObjPersistenciaSQL.executaUpdateQuery(sql);
  except
    on e : Exception do
  end;
end;

function TContasReceberDb.procurarContasReceber(pCodigo : Integer) : TContasReceberMd;
var
  resultSet : TIBDataSet;
  pObjContasReceberMd : TContasReceberMd;
begin
  try
    pObjContasReceberMd := TContasReceberMd.Create;
    resultSet := self.objPersistenciaSQL.executaQuery('select * from contasreceber where id_contasreceber = ' + IntToStr(pCodigo) +
    ' and usuario_id = ' + IntToStr(TUsuarioMd(TLoginCt(TLoginCt.obterInstancia).obterControle).getIdUsuario));
    if (resultSet <> nil) then
    begin
      resultSet.First;
      pObjContasReceberMd.setIdContasReceber(resultSet.FieldValues['id_contasreceber']);
      pObjContasReceberMd.setDataRecebimento(resultSet.FieldByName('data_recebimento').AsDateTime);
      pObjContasReceberMd.setValor(resultSet.FieldValues['valor']);

      result := pObjContasReceberMd;
    end;
    
  except
    on e : Exception do
    begin
      result := nil;
    end;
  end;
end;

function TContasReceberDb.obterContasReceber : TContasReceberMd;
begin
end;

function TContasReceberDb.obterListaContasReceber : TIBDataSet;
var
  resultSet : TIBDataSet;
begin
  try
    resultSet := self.obterObjPersistenciaSQL.carregarBaseDeDados('contasreceber');
    result := resultSet;
  except
    on e : Exception do
      result := nil;
  end;
end;

end.
